function objetos_propriedades = segmentar_objetos(im,mostrar_passos,mostrar_tempo)
  
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
    %CONSTANTES
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    separar_objetos = false;
    recuperar_objetos = false;
    excluir_objetos_disformes = true; 
    MULT_AREA_COD2D = 2;
    LUM_DETALHE = 120;
    LUM_EXCLUIDO = 60;
    LUM_MANTIDO = 255;    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    titulo = 'PREENCHENDO "BURACOS" NOS OBJETOS';
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if (mostrar_tempo)
        tic;
    end
    
    %PREENCHENDO OS BURACOS
    im_antes = im;
    im = imfill(im,'holes');  
    
    if (mostrar_tempo)        
        disp([titulo ': ' num2str(toc)]);
    end

    if (mostrar_passos)
        im_passo = uint8((im-im_antes)*LUM_DETALHE) + uint8(im_antes*LUM_MANTIDO);        
        figure(gcf+1);
        imshow(im_passo,'InitialMagnification','fit');
        title(titulo);
    end  
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    titulo = 'EXCLUINDO OBJETOS MUITO GRANDES';
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if (mostrar_tempo)
        tic;
    end
    
    se = strel('square',2);
    im_temp = imdilate(im,se);
 
    L = bwlabel(im_temp);
    rprops = regionprops(L,'Solidity','FilledArea','PixelIdxList');
    
    area  = cat(1,rprops.FilledArea);
    
    [area_max idx] = max(area);
    area(idx) = 0;
    
    [area_ordenada temp] = sort(area,1,'descend');
    
    if (length(area) >= 10)
        m_area = mean(area_ordenada(1:10));
    else
        m_area = mean(area_ordenada);
    end
    
    pixel_lista = [];
    
    if ((area_max > MULT_AREA_COD2D*m_area) & (rprops(idx).Solidity > 0.8))
        pixel_lista = rprops(idx).PixelIdxList;        
    end

    im_antes = im;
    im(pixel_lista) = 0;
    
    if (mostrar_tempo)
        disp([titulo ': ' num2str(toc)]);
    end

    if (mostrar_passos)
        im_passo = uint8((im_temp-im_antes)*(LUM_DETALHE)); 
        im_passo = im_passo + uint8(im*LUM_MANTIDO);
        im_passo(pixel_lista) = LUM_EXCLUIDO;
        figure(gcf+1);
        imshow(im_passo,'InitialMagnification','fit');
        title(titulo);
    end 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    titulo = 'EXCLUINDO OBJETOS MUITO PEQUENOS';
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if (mostrar_tempo)
        tic;
    end
    
    im_antes = im;
    
    dim_square = round(m_area^(1/4));
    se = strel('square',dim_square);
  
    im = imerode(im,se);
    
    if (mostrar_tempo)
        disp([titulo ': ' num2str(toc)]);
    end
       
    if (mostrar_passos)
        im_passo = uint8((im_antes - im_temp)*LUM_DETALHE);
        im_passo = im_passo + uint8((im_temp - im)*LUM_EXCLUIDO);
        im_passo = im_passo + uint8(im*LUM_MANTIDO);
        figure(gcf+1);
        imshow(im_passo,'InitialMagnification','fit');
        title([titulo]);
    end 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    titulo = 'SELECIONANDO OS OBJETOS DE INTERESSE';
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    L = bwlabel(im);
    rprops = regionprops(L,'Centroid','FilledArea','PixelIdxList'); 
        
    if (mostrar_tempo)
       tic;
    end
        
    if (mostrar_tempo)
       disp([titulo ': ' num2str(toc)]);
    end
       
    objetos_propriedades = rprops; 
 
end